跳到主要内容

流水线服务部署

为帮助用户更加深入了解DevOps流水线任务模板的使用场景,可以借助平台的PaaS功能,部署相关服务,在流水线中使用体验。

Tenxbox(演示应用demo)

(1) 通过[容器服务][工作负载]新建Deployment。

tenxbox Deployment YAML 文件

apiVersion:apps/v 1
kind:Deployment
metadata:
name:tenxbox
namespace:namespace 3
labels:
app:tenxbox
name:tenxbox
system/appName:tenxbox
system/svcName:tenxbox
annotations:
sidecar.istio.io/inject:'false'
spec:
replicas: 1
selector:
matchLabels:
name:tenxbox
strategy:
type:Recreate
template:
metadata:
labels:
app:tenxbox
io.kompose.service:tenxbox
name:tenxbox
system/appName:tenxbox
system/svcName:tenxbox
annotations:
imagetag_arch:amd 64
imagetag_os:linux
sidecar.istio.io/inject:'false'
system/registry:''
useReadinessConfig:'true'
spec:
containers:
name:tenxbox
image: 192. 168 .x.x/system_containers/tenxbox: 1. 1 '
ports:
containerPort: 8080
protocol:TCP
resources:
limits:
cpu:' 1 '
memory: 1024 Mi
requests:
cpu:' 1 '
memory: 1024 Mi
imagePullPolicy:Always
restartPolicy:Always
serviceAccountName:default
serviceAccount:default

Tenxbox Service YAML 文件

apiVersion:v 1
kind:Service
metadata:
labels:
name:tenxbox
system/appName:tenxbox
system/svcName:tenxbox
name:tenxbox
namespace:namespace 3
spec:
ports:
name:tcp-tenxbox- 0
protocol:TCP
port: 8080
targetPort: 8080
selector:
name:tenxbox
type:ClusterIP
sessionAffinity:None

(2) 通过[网络管理/应用路由/服务代理],增加路由规则。

test

(3) 在流水线任务“服务校验”可添加该应用。

SonarQube

工具简介:SonarQube是管理代码质量的开放平台,可以快速定位代码中潜在的或者明显的错误。

在DevOps中,SonarQube主要用于“SonarQube”任务模板,由包含SonarQube任务的流水线执行后,可在流水线界面“代码质量”标签下查看代码扫描结果。

部署方式:

(1) 通过“容器服务”的“工作负载”新建Deployment。

(2) Deployment部署YAML如下所示。

system_containers/sonarqube: 7. 1 - alpine

在平台系统镜像仓库已配备。

168 .x.x/system_containers/sonarqube: 7. 1 - alpine 具体地址需跟镜像存放地址一致。

sonarqube Deployment YAML 文件

apiVersion:apps/v 1
kind:Deployment
metadata:
name:sonarqube
namespace:project 4
labels:
app:sonarqube
name:sonarqube
system/appName:sonarqube
system/svcName:sonarqube
annotations:
sidecar.istio.io/inject:'false'
spec:
replicas: 1
selector:
matchLabels:
name:sonarqube
strategy:
type:Recreate
template:
metadata:
labels:
app:sonarqube
io.kompose.service:sonarqube
name:sonarqube
system/appName:sonarqube
system/svcName:sonarqube
annotations:
imagetag_arch:amd 64
imagetag_os:linux
sidecar.istio.io/inject:'false'
system/registry:''
useReadinessConfig:'true'
spec:
containers:

name:sonarqube
image:' 192. 168 .x.x/system_containers/sonarqube: 7. 1 - alpine'
ports:
containerPort: 9000
protocol:TCP
resources:
limits:
cpu:' 1 '
memory: 2048 Mi
requests:
cpu:' 1 '
memory: 2048 Mi
imagePullPolicy:Always
restartPolicy:Always
serviceAccountName: default
serviceAccount: default

sonarqube Service YAML 文件

apiVersion:v 1
kind:Service
metadata:
labels:
name:sonarqube
system/appName:sonarqube
system/svcName:sonarqube
name:sonarqube
namespace:project 4
spec:
ports:
name:tcp-sonarqube- 0
protocol:TCP
port: 9000
targetPort: 9000
selector:
name:sonarqube
type:ClusterIP
sessionAffinity:None

(3) 为sonarqube配置网络访问方式。在下图所示,增加一条服务代理。

(4) 待服务正常启动后,通过服务代理访问SonarQube服务地址、用户名/密码(默认 admin/admin)用于DevOps流水线中SonarQube相关任务配置。

平台使用示例:测试使用sonarqubeurl和用户名密码为:http://192.168.0.82:17788,admin/admin

(1) 登录sonarqube,创建sonarqube项目。

(2) 创建“质量门”,设置阈值,并将项目添加使用该质量门配置,这里做demo,仅添加CodeSmells指标,在实际使用时可根据情况增删“质量门”阈值指标。

(3) 打开平台DevOps/流水线页,创建sonarqube demo流水线并添加sonarqube任务,配置如下所示。其中有三处设置需要注意。

备注
  • sonarqube认证设置需使用上面sonarqube服务的地址和账户。
  • 项目配置中使用上面在sonarqube服务中创建的项目。
  • sonarqube检测结果配置,需配置为使用sonarqube质量门状态并配置检测成功的条件。

当配置为使用质量门状态时,代码扫描完后会将扫描结果的指标与“b”中创建的项目对应的质量门阈值指标进行比较,生成扫描最终结果。

test

(4) 执行流水线,构建结束后查看扫描结果。

(5) 同时可在sonarqube服务中查看本次扫描的更多细节。

Jenkins

在DevOps中,Jenkins主要用于“Jenkins任务”任务模板。通过该任务,可以配置Jenkins服务中的Job信息并由平台流水线任务触发执行Jenkins的Job构建,可在流水线任务中查看Jenkins构建日志。

部署方式:在平台使用[容器服务][工作负载]进行部署:

(1) 通过[容器服务/工作负载]新建Deployment。

(2) Deployment部署YAML如 system_containers/jenkins:2.60.3-alpine

在平台系统镜像仓库已配备。

168.x.x/system_containers/jenkins:2.60.3-alpine,具体地址需跟镜像存放地址一致

新建 jenkinsDeploymentjenkinsYAML文件。

apiVersion:apps/v 1
kind:Deployment
metadata:
name:jenkins
namespace:project 4
labels:
app:jenkins
name:jenkins
system/appName:jenkins
system/svcName:jenkins
annotations:
sidecar.istio.io/inject:'false'
spec:
replicas: 1
selector:
matchLabels:
name:jenkins
strategy:
type:Recreate
template:
metadata:
labels:
app:jenkins
io.kompose.service:jenkins
name:jenkins
system/appName:jenkins
system/svcName:jenkins
annotations:
imagetag_arch:amd 64
imagetag_os:linux
sidecar.istio.io/inject:'false'
system/registry:''
useReadinessConfig:'true'
spec:
containers:
name:jenkins
image:' 192. 168 .x.x/system_containers/jenkins: 2. 60. 3 - alpine'
ports:
containerPort: 50000
protocol:TCP
containerPort: 8080
protocol:TCP
resources:
limits:
cpu:' 1 '
memory: 2048 Mi
requests:
cpu:' 1 '
memory: 2048 Mi
imagePullPolicy:Always
restartPolicy:Always
serviceAccountName: default
serviceAccount: default

jenkins Service YAML 文件

apiVersion:v 1
kind:Service
metadata:
labels:
name:jenkins
system/appName:jenkins
system/svcName:jenkins
name:jenkins
namespace:project 4
spec:
ports:
name:tcp-jenkins- 0
protocol:TCP
port: 50000
targetPort: 50000
name:tcp-jenkins- 1
protocol:TCP
port: 8080
targetPort: 8080
selector:
name:jenkins
type:ClusterIP
sessionAffinity:None

(3) 为jenkins添加一条服务代理。如下图所示。

(4) 到[容器应用/服务],查看jenkins的访问地址,如下图所示。

(5) 获取Jenkins服务初始化密码(Administratorpassword)。从应用部署详情“终端”进入Jenkins容器服务终端页面,通过:cat/var/jenkins_home/secrets/initialAdminPassword查看Jenkins服务初始化密码并初始化Jenkins。

test

密码获取页面如下图所示。

(6) 配置Jenkins服务用户名./密码。安装Jenkisn插件并配置完账户信息后可以在DevOps流水线中Jenkins相关任务配置。

test

Jenkins部署完成后,需要登录Jenkins的系统管理,设置生成前等待时间为 0 ,如下图所示。

平台使用示例:demo测试使用jenkins url及帐号:http://192.168.0.82:59171/admin/admin。

(1) 新建jenkins任务并选择jenkins项目。

(2) 在流水线执行记录和jenkins服务中查看job构建结果。

jenkins服务中freejob构建记录。项目页面如下图所示。

GitLab

在DevOps中,GitLab主要用于为流水线及任务提供“代码源”,并通过流水线中相关任务完成对代码CI操作。

部署方式:在平台使用[容器服务/工作负载]进行部署:

(1) 通过[容器服务/工作负载]新建Deployment。

(2) Deployment部署YAML如 system_containers/gitlab-ce: 12.6.2-ce.0在平台系统镜像仓库已配备。

168.x.x/system_containers/gitlab-ce:12.6.2-ce.0,具体地址需跟镜像存放地址一致。

新建 gitlab Deployment文件

apiVersion:apps/v 1
kind:Deployment
metadata:
name:gitlab
namespace:project 4
labels:
app:gitlab
name:gitlab
system/appName:gitlab
system/svcName:gitlab
annotations:
sidecar.istio.io/inject:'false'
spec:
replicas: 1
selector:
matchLabels:
name:gitlab
strategy:
type:Recreate
template:
metadata:
labels:
app:gitlab
io.kompose.service:gitlab
name:gitlab
system/appName:gitlab
system/svcName:gitlab
annotations:
imagetag_arch:amd 64
imagetag_os:linux
sidecar.istio.io/inject:'false'
system/registry:''
useReadinessConfig:'true'
spec:
containers:
name:gitlab
image:' 192. 168 .x.x/system_containers/gitlab-ce: 12. 6. 2 - ce. 0 '
ports:
containerPort: 22
protocol:TCP
containerPort: 443
protocol:TCP
containerPort: 80
protocol:TCP
resources:
limits:
cpu:' 2 '
memory: 8192 Mi
requests:
cpu:' 2 '
memory: 8192 Mi
imagePullPolicy:Always
restartPolicy:Always
serviceAccountName: default
serviceAccount: default

gitlab Service YAML文件如下所示。

apiVersion:v 1
kind:Service
metadata:
labels:
name:gitlab
system/appName:gitlab
system/svcName:gitlab
name:gitlab
namespace:project 4
spec:
ports:
name:tcp-gitlab- 0
protocol:TCP
port: 22
targetPort: 22
name:tcp-gitlab- 1
protocol:TCP
port: 443
targetPort: 443
name:tcp-gitlab- 2
protocol:TCP
port: 80
targetPort: 80
selector:
name:gitlab
type:ClusterIP
sessionAffinity:None

(3) 为gitlab添加一条服务代理,切换到[容器应用/服务],查看gitlab的访问地址,如下图所示。

test

(4) 待服务正常启动后,配置root账户默认密码。

(5) gitlab设置完成。为项目添加代码仓库后,创建流水线时可被使用为代码源。具体可参考流水线使用产品手册。

需要更改服务的IP地址和端口,以免访问不到可用于CI/CD流水线“代码仓库”,配置方法如下:vim/opt/gitlab/embedded/service/gitlab-rails/config/gitlab.yml

修改里面的IP和端口,然后重启,重启命令为:gitlab-ctlrestart

平台使用示例:示例中使用GitLab地址和账号为:http://192.168.0.82:20387/

GitLab在DevOps平台中主要用于提供代码源和作为代码仓库时触发流水线的CI触发源。作为流水线任务的代码源。

(1) 添加代码仓库,代码仓库页面如下图所示。

test

(2) 可选择需要激活使用的代码源。创建流水线并使用已激活代码源作为流水线代码源。

test

(3) 创建流水线任务并执行。

Hitchhiker

HitchhikerApi是一个RestfulApi集成测试工具,支持计划,响应比较,压力测试,支持上载js文件以挂接请求。主要提供以下功能。

信息
  • 多人协作

  • 自动化Runrequests

  • 压力测试

  • 不同环境的数据对比

用户可查看Hitchhiker官方部署文档。使用 docker-compose方式部署。

部署方式:在平台使用[容器服务/工作负载]进行部署。

(1) 通过[容器服务/工作负载]新建hitchhiker-mysql的Deployment。

apiVersion:apps/v 1
kind:Deployment
metadata:
name:hitchhiker-mysql
namespace:namespace 3
labels:
app:hitchhiker-mysql
name:hitchhiker-mysql
system/appName:hitchhiker-mysql
system/svcName:hitchhiker-mysql
annotations:
sidecar.istio.io/inject:'false'
spec:
replicas: 1
selector:
matchLabels:
name:hitchhiker-mysql
template:
metadata:
labels:
app:hitchhiker-mysql
io.kompose.service:hitchhiker-mysql
name:hitchhiker-mysql
system/appName:hitchhiker-mysql
system/svcName:hitchhiker-mysql
annotations:
imagetag_arch:amd 64
imagetag_os:linux
sidecar.istio.io/inject:'false'
system/registry:''
useReadinessConfig:'true'
spec:
containers:
name:hitchhiker-mysql
image:' 192. 168 .x.x/system_containers/mysql: 5. 7 '
ports:

- containerPort: 3306
protocol:TCP
env:
- name:MYSQL_ROOT_PASSWORD
value:hitchhiker 888
- name:MYSQL_DATABASE
value:hitchhiker-prod
resources:
limits:
cpu:' 1 '
memory: 2 Gi
requests:
cpu:' 1 '
memory: 2 Gi
restartPolicy:Always
serviceAccountName:default
serviceAccount:default

(2) hitchhiker-mysql的ServiceYAML文件如下所示。

apiVersion:v 1
kind:Service
metadata:
labels:
name:hitchhiker-mysql
system/appName:hitchhiker-mysql
system/svcName:hitchhiker-mysql
name:hitchhiker-mysql
namespace:namespace 3
spec:
ports:
name:tcp-hitchhiker-mysql- 0
protocol:TCP
port: 3306
targetPort: 3306
selector:
name:hitchhiker-mysql
type:ClusterIP
sessionAffinity:None

(3) Hitchhiker的Deployment内容如下。

apiVersion:apps/v 1
kind:Deployment
metadata:
name:hitchhiker
namespace:namespace 3
labels:
app:hitchhiker
name:hitchhiker
system/appName:hitchhiker
system/svcName:hitchhiker
annotations:
sidecar.istio.io/inject:'false'
spec:
replicas: 1
selector:
matchLabels:
name:hitchhiker
strategy:
type:Recreate
template:
metadata:
labels:
app:hitchhiker
io.kompose.service:hitchhiker
name:hitchhiker
system/appName:hitchhiker
system/svcName:hitchhiker
annotations:
imagetag_arch:amd 64
imagetag_os:linux
sidecar.istio.io/inject:'false'
system/registry:''
useReadinessConfig:'true'
spec:
containers:
name:hitchhiker
image:' 192. 168 .x.x/system_containers/hitchhiker:v 0. 14 '
ports:
containerPort: 8080
protocol:TCP
containerPort: 11010
protocol:TCP
env:
name:HITCHHIKER_DB_HOST
value:hitchhiker-mysql
name:HITCHHIKER_APP_HOST
value:hitchhiker: 8080 /
resources:
limits:
cpu:' 1 '
memory: 2048 Mi
requests:
cpu:' 1 '
memory: 2048 Mi
imagePullPolicy:Always
restartPolicy:Always
serviceAccountName:default
serviceAccount:default

(4) hitchhiker的Serviceyaml如下所示。

apiVersion:v 1
kind:Service
metadata:
labels:
name:hitchhiker
system/appName:hitchhiker
system/svcName:hitchhiker
name:hitchhiker
namespace:namespace 3
spec:
ports:
name:tcp-hitchhiker- 0
protocol:TCP
port: 8080
targetPort: 8080
name:tcp-hitchhiker- 1
protocol:TCP
port: 11010
targetPort: 11010
selector:
name:hitchhiker
type:ClusterIP
sessionAffinity:None

(5) 为hitchhiker服务配置应用路由。

(6) 更改hitchhiker的Deployment和Service的yaml,编辑Deployment的步骤如下所示。

(7) 将环境变量中的 HITCHHIKER_APP_HOST,改为对外的url地址(应用路由的IP和端口号),如:http://192.168.0.73:64259/

(8) 将容器内的containerPort,从原来的 8080 改为 64259 ,保存Deployment。

(9) 编辑Service配置文件,将targetPort,从原来的 8080 改为 64259 ,保存Servcie。

(10)修改后查看服务列表里的访问方式,可以查看外部访问地址。

(11)待Hitchhiker服务正常启动后,打开页面按照提示信息配置管理员账户。然后即可在hitchhiker服务上创建对应测试用例,并根据流水线使用手册中hitchhiker任务模板配置相应流水线任务,完成API测试工作。

test

demo实例hitchhikerurl和账号:http://192.168.0.82:17000/123@123.com/123qwe

(1) 登录hitchhiker创建测试用例。登录实例页面如下图所示。

(2) 创建流水线hitchhiker任务,配置如下。

test

(3) 执行流水线,查看hitchhiker执行结果。执行记录页面如下图所示。

test

Testlink是一个开源的测试管理工具,主要用于管理测试用例,从测试需求、测试计划、测试用例管理和用例执行,到最后的结果分析,一套完整的测试流程控制,帮助测试人员有效的控制测试过程。

Testlink的主要功能如下所示。

信息
  • 测试需求的管理
  • 测试计划的管理
  • 测试用例的管理
  • 测试用例的执行
  • 测试结果的分析(包括测试结果的图表分析)
  • 基于角色的用户管理

部署方式:

(1) 在[容器服务/工作负载]创建MariaDB和Testlink的Deployment,[容器服务/网络管理]创建MariaDB和Testlink的Service。

(2) 参考以下YAML文件,创建对应资源。YAML文件中使用的镜像:system_containers/mariadb:10.3system_containers/testlink: 1 在平台镜像仓库已配备。部署时需将具体镜像地址替换:168 .x.x/system_containers/mariadb:10.3、168.x.x/system_containers/testlink:1

(3) MariaDB Deployment YAML。

apiVersion:apps/v 1
kind:Deployment
metadata:
name:mariadb
namespace:namespace 3
labels:
app:mariadb
name:mariadb
system/appName:mariadb
system/svcName:mariadb
annotations:
sidecar.istio.io/inject:'false'
spec:
replicas: 1
selector:
matchLabels:
name:mariadb
template:
metadata:
labels:
app:mariadb
io.kompose.service:mariadb
name:mariadb
system/appName:mariadb
system/svcName:mariadb
annotations:
imagetag_arch:amd 64
imagetag_os:linux
sidecar.istio.io/inject:'false'
system/registry:''
useReadinessConfig:'true'
spec:
containers:

name:mariadb
image:' 192. 168 .x.x/system_containers/mariadb: 10. 3 '
ports:
containerPort: 3306
protocol:TCP
env:
name:MARIADB_USER
value:bn_testlink
name:MARIADB_DATABASE
value:bitnami_testlink
name:ALLOW_EMPTY_PASSWORD
value:"yes"
resources:
limits:
cpu:' 1 '
memory: 2 Gi
requests:
cpu:' 1 '
memory: 2 Gi
restartPolicy:Always
serviceAccountName: default
serviceAccount: default

(4) mariadb Service YAML配置文件如下所示。

kind:Service
metadata:
labels:
name:mariadb
system/appName:mariadb
system/svcName:mariadb
name:mariadb
namespace:namespace 3
spec:
ports:
name:tcp-mariadb- 0
protocol:TCP
port: 3306
targetPort: 3306
selector:
name:mariadb
type:ClusterIP
sessionAffinity:None

(5) testlink Deployment YAML如下所示。

apiVersion:apps/v 1
kind:Deployment
metadata:
name:testlink
namespace:namespace 3
labels:
app:testlink
name:testlink
system/appName:testlink
system/svcName:testlink
annotations:
sidecar.istio.io/inject:'false'
spec:
replicas: 1
selector:
matchLabels:
name:testlink
template:
metadata:
labels:
app:testlink
io.kompose.service:testlink
name:testlink
system/appName:testlink
system/svcName:testlink
annotations:
imagetag_arch:amd 64
imagetag_os:linux
sidecar.istio.io/inject:'false'
system/registry:''
useReadinessConfig:'true'
spec:
containers:

name:testlink
image:' 192. 168 .x.x/system_containers/testlink: 1 '
ports:
containerPort: 3306
protocol:TCP
env:
name:MARIADB_HOST
value:mariadb
name:MARIADB_PORT_NUMBER
value:" 3306 "
name:TESTLINK_DATABASE_USER
value:bn_testlink
name:TESTLINK_DATABASE_NAME
value:bitnami_testlink
name:ALLOW_EMPTY_PASSWORD
value:"yes"
resources:
limits:
cpu:' 1 '
memory: 2 Gi
requests:
cpu:' 1 '
memory: 2 Gi
restartPolicy:Always
serviceAccountName: default
serviceAccount: default

(6) testlink Service YAML配置文件如下所示。

kind:Service
metadata:
labels:
name:testlink
system/appName:testlink
system/svcName:testlink
name:testlink
namespace:namespace 3
spec:
ports:
name:tcp-testlink- 0
protocol:TCP
port: 80
targetPort: 80
name:tcp-testlink- 1
protocol:TCP
port: 443
targetPort: 443
selector:
name:testlink
type:ClusterIP
sessionAffinity:None

(7) 为Testlink配置服务代理,Testlink默认账户名/密码 user/bitnami。配置完成后即可在平台“软件工程过程管理”中使用Testlink服务。

平台使用示例:Testlink主要用于“软件工程过程管理”模块中,页面显示如下图所示。

test

(1) 从JIRA中导出项目需求,将JIRA中需求导入到Testlink中,作为“产品需求规格”导入。导入页面如下图所示。

test

(2) 创建Testlink测试用例集和测试用例,并将创建的测试用例添加到产品需求中。

test

(3) 创建测试计划,创建页面如下图所示。

test

(4) 将测试用例关联到测试计划中,配置页面如下图所示。

test

(5) 关联后可在测试计划中查看到对应测试用例集和测试用例。查看页面如下图所示。

test

(6) 在JIRA中创建缺陷,并将缺陷的“测试用例标识”字段输入在testlink相关的关联用例(TD-1)。配置页面如下图所示。

test

(7) 在“软件工程过程管理”中查看Testlink测试用例与JIRA中需求的关联关系。

test